package com.group1.bookmanagement.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;

public interface BaseDao<T> {
	
	/**
	 * 获取Session
	 * @return
	 */
	Session openSession();
	
	/**
	 * 获取Session
	 * @return
	 */
	Session getCurrentSession();

	/**
	 * 新增
	 * @param t
	 * @return 返回id
	 */
	Serializable save(T t);
	
	/**
	 * 删除
	 * @param t
	 */
	void delete(T t);
	
	/**
	 * 修改
	 * @param t
	 */
	void update(T t);
	
	/**
	 * 保存或更新
	 * @param t
	 */
	void saveOrUpdate(T t);
	
	/**
	 * 合并对象(当数据库中找不到该对象时保执行insert，当数据库中存在该对象时执行update)
	 * @param t
	 */
	void merge(T t);
	
	/**
	 * 查询
	 * @param clazz
	 * @param id 主键
	 * @return
	 */
	T get(Class<T> clazz, Serializable id);
	
	/**
	 * 查询所有
	 * @param hql
	 * @return
	 */
	List<T> list(Class<T> clazz);
	
	/**
	 * hql查询
	 * @param hql
	 * @return
	 */
	Object find(String hql);
	
	/**
	 * hql查询(带参数)
	 * @param hql
	 * @param param
	 * @return
	 */
	Object find(String hql, Object... param);
	
	/**
	 * hql查询所有
	 * @param hql
	 * @return
	 */
	List<T> findAll(String hql);
	
	/**
	 * hql查询所有(带参数)
	 * @param hql
	 * @param param
	 * @return
	 */
	List<T> findAll(String hql, Object... param);
	
	/**
	 * hql查询(带分页)
	 * @param hql
	 * @param offset 起始数据
	 * @param limit 返回数据条数
	 * @return
	 */
	List<T> findAll(String hql, int offset, int limit);
	
	/**
	 * hql查询(带分页&参数)
	 * @param hql
	 * @param offset 起始数据
	 * @param limit 返回数据条数
	 * @param param
	 * @return
	 */
	List<T> findAll(String hql, int offset, int limit, Object... param);
	
}
